草庐IT

C++ 空类或 typedef

全部标签

c++ - 如何从模板化基础中消除多个继承的 typedef 的歧义?

编辑:我正在为Windows使用tdm-gcc-4.7.1-2不知道如何解决这个问题。我想将其用作一种类型列表,让我知道我正在尝试使用B中不存在的类型的类型定义。templatestructA{typedefpairtype;};structB:A,A{};B::typefoo;//won'tcompile,ambiguousreference,asexpectedB::A::typebar;//compilesfine??:(有没有办法让它在A上失败?(以及任何其他A未被B继承的),或另一种解决方法?我想我可以使用tuple并递归我的方式,做一个is_same将每个元素与我提供给元函

c++ - 我可以 typedef 模板模板参数吗?

在C++库头文件中,我们有时会看到以下内容以提高类内代码的易读性:templateclassC{public:typedefMyExplicitelyLongTemplateParameterP;//Use"P"andkeepyoursanity.};我的问题是,可以对模板模板参数做同样的事情吗?templatetypenameMyExplicitelyLongTemplateParameter>classC{public:typedef/*???*/P;//Use"P"andkeepyoursanity.}; 最佳答案 你不能创建

c++ - 我可以在函数定义中使用函数 typedef 吗?

我已经定义了:typedefintFunkyFunc(intx);现在,我希望能够在FunkyFunc类型的函数定义中使用此typedef,例如FunkyFuncf{return2*x;}或FunkyFuncf(intx){return2*x;}或FunkyFuncf(x){return2*x;}我可以做与上述任何一项类似的事情吗?它们似乎都无法编译。 最佳答案 这是C++标准部分8.3.5Functions段落中的格式错误>10说:Atypedefoffunctiontypemaybeusedtodeclareafunctionb

C++:在 MSVC 中使用 __stdcall 回调 typedef

这个类型定义:typedefDWORDWINAPI(*CM_Open_DevNode_Key)(DWORD,DWORD,DWORD,DWORD,PHKEY,DWORD);在BorlandCpp中编译良好,但是,当我在msvc中编译它时,我必须删除WINAPI(它只是__stdcall的别名):typedefDWORD(*CM_Open_DevNode_Key)(DWORD,DWORD,DWORD,DWORD,PHKEY,DWORD);为什么会这样?我可以安全地删除WINAPI部分吗?更新:我必须从typedef中删除“WINAPI”,否则我会得到errorC2059:syntaxerr

c++ - 跨命名空间的 typedef 解析

我目前对“使用(命名空间)”语句在C++中的工作方式感到困惑。我有://somewhereinincludedheaderstypedefunsignedintuint;namespacemine{typedefunsignedintuint;}namespaceother{usingnamespacemine;voidfoobar(){uintoffender=i;}}结果(解释):对“uint”的引用不明确。候选人是typedefunsignedintuint和typedefunsignedintmine::uint同时,当我这样做的时候namespaceother{usingna

c++ - 这个 typedef 定义是什么意思?

我看过以下(C++):typedefn*(m)(constn*,constn*);它是什么意思,如何使用?我的理解是:typedefn(*myFunctP)(constn*,constn*);但是和上面的typedef有什么区别呢?(希望这不是重复的,没有找到类似的东西......) 最佳答案 我问了geordi为我赢得一些代表:;structn{};typedefn*(m)(constn*,constn*);functiontaking2pointerstoconstantnsandreturningapointertoanC类型

c++ - 调用空类的构造函数真的会占用内存吗?

假设我有一个类classEmpty{Empty(inta){cout然后我调用它使用intmain(){Empty(2);return0;}这会导致在堆栈上分配任何内存以创建“空”对象吗?显然,需要将参数压入堆栈,但我不想招致任何额外的开销。基本上我将构造函数用作静态成员。我想这样做的原因是模板。实际代码看起来像templateclassFuncName{templateFuncName(constT&value){if(which==1){//specificbehavior}elseif(which==2){//otherspecificbehavior}}};这让我可以写类似的东

c++ - 如何typedef指向返回方法指针的方法的指针?

基本上我有以下类(class):classStateMachine{...StateMethodstateA();StateMethodstateB();...};stateA()和stateB()方法应该能够返回指向stateA()和stateB()的指针。如何对StateMethod进行类型定义? 最佳答案 GotW#57说要为此目的使用具有隐式转换的代理类。structStateMethod;typedefStateMethod(StateMachine::*FuncPtr)();structStateMethod{State

c++ - 内部 typedef 的变化取决于父类

我放弃了,请帮忙解释一下这个行为。我在下面给出的示例是我能想到的最简单的示例,但它总结了问题(在启用了c++14的Cygwin上使用g++4.9.2)。我想创建一个行为类似于std::mem_fn的类。这是我的类(class):templatestructproperty{staticRget(constT&t){return(t.*P)();}};其中R是返回类型,T是我感兴趣的对象的类型。第三个模板参数是指向成员函数的指针。到目前为止,还不错。然后我创建一个简单的类,它包含一个整数,如下所示classdata_class{public:unsignedget_data()const

c++ - 如何创建 typedef 结构的前向声明

我有1个包含类的.h文件test.h。在这个类中,有一个私有(private)方法返回一个类型的指针,我不想将其设为“公共(public)”,但我希望能够将此test.h文件包含在其他源文件中。一般来说,在.h文件中使用前向声明很容易:classFoo;但问题是这个类型来自一个C文件我不能改变(因为它是我不维护的其他人的代码)而且它是一个typedef.所以基本上我的test.cpp是://thistypecomesfromaCfile,cannotbechangedtostructorclasstypedefstruct{intx;}Foo;#include"test.h"stati